from src.domain import *
TOTAL = 1
large_us_stocks = {
"VTI": 0.8,
"VNQ (REIT)": 0.2
}
large_exus_stocks = {
"EAFE": 1
}
small_us_stocks = {
"IJS": 1
}
small_exus_stocks = {
"EAFE Small-Cap": 1
}
bonds = {
"BND": 1,
}
fund_shares = [large_us_stocks, large_exus_stocks, small_us_stocks, small_exus_stocks, bonds]
categories = SharesCategoriesDistribution(
by_type=dict(zip((ShareType.Stock, ShareType.Bond), (0.75, 0.25))),
by_region=dict(zip((Region.US, Region.ExUS), (0.7, 0.3))),
by_cap=dict(zip((Cap.Large, Cap.Small), (0.7, 0.3))),
by_term=dict(zip((Term.Long, ), (1, ))),
)
distribution = SharesDistribution(
categories=categories,
funds=fund_shares
)
def assert_shares(obj):
assert(sum(obj.values()) == TOTAL)
for shares in [categories.by_cap, categories.by_region, categories.by_term, categories.by_type] + fund_shares:
assert_shares(shares)
###
flatten_stock_portfolio = []
stock_share = categories.by_type[ShareType.Stock]
for (region_key, region_value) in categories.by_region.items():
for (cap_key, cap_value) in categories.by_cap.items():
flatten_stock_portfolio.append({
"region": region_key.value,
"share": stock_share * region_value * cap_value,
"cap": cap_key.value
})
def sort_by_share(portfolio):
return sorted(portfolio, key=lambda x: x["share"], reverse=True)
flatten_stock_portfolio = sort_by_share(flatten_stock_portfolio)